package com.wind.cloud.common.lock;

/**
 * 乐观锁
 * <p>
 * <code>
 * if (lock.tryLock("key", "val")) {
 * try {
 * // do something
 * } finally {
 * lock.unLock("key", "val");
 * }
 * }
 * </code>
 *
 * @author wind.
 */
public interface ILock {

    /**
     * 尝试获得锁（默认锁定60s）
     *
     * @param key key
     * @param val val
     * @return
     */
    boolean tryLock(String key, String val);

    /**
     * 尝试获得锁
     *
     * @param key         key
     * @param val         val
     * @param expireMills 锁定时间
     * @return
     */
    boolean tryLock(String key, String val, long expireMills);


    /**
     * 获得锁
     *
     * @param key          key
     * @param val          val
     * @param timeoutMills 超时时间
     * @return
     */
    boolean lock(String key, String val, long timeoutMills);

    /**
     * 获得锁
     *
     * @param key          key
     * @param val          val
     * @param expireMills  锁定时间
     * @param timeoutMills 超时时间
     * @return
     */
    boolean lock(String key, String val, long expireMills, long timeoutMills);

    /**
     * 释放锁
     *
     * @param key key
     * @param val val
     * @return
     */
    boolean unLock(String key, String val);

}
